# 写一个视图集，提供一下两个接口
# 1.获取所有的图书信息  GET /books/  list
# 2.获取指定的图书信息  POST /books/(?P<pk>\d+)/  retrieve
from rest_framework.viewsets import ReadOnlyModelViewSet
from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAuthenticated, BasePermission
from booktest.models import BookInfo
from booktest.serializers import BookInfoSerializer
from rest_framework.throttling import AnonRateThrottle
# 自定义权限控制类
class MyPermission(BasePermission):
    def has_permission(self, request, view):
        """控制用户是否对,使用此权限控制类的视图有访问权限：True有   False没有"""
        return True

    def has_object_permission(self, request, view, obj):
        """控制用户是否对，使用此权限控制类的视图中的某个数据对象有访问权限：True有 False没有"""
        # 需求:对id为1,3的对象有访问权限，其他的对象没有访问权限
        if obj.id in (1,3):
            return True
        else:
            return False
class BookInfoViewSet(ReadOnlyModelViewSet):
    # 指定视图所使用的查询集
    queryset = BookInfo.objects.all()
    # 指定视图所使用的序列化器类
    serializer_class = BookInfoSerializer

    # 指定当前视图的认证方式（不再使用全局认证方案）
    authentication_classes = [SessionAuthentication]
    # 指定当前视图的权限控制方式（不再使用全局的权限控制方案）
    # permission_classes = [IsAuthenticated]

    permission_classes = [MyPermission]

    # 指定当前视图的限流方式（不再使用全局限流方案）：此处只针对匿名用户进行限流
    # throttle_classes = [AnonRateThrottle]

    # 指定限流频次的选择项(不论认证和匿名用户，都一样）
    throttle_classes = 'upload'

